package ferp.core.ai.filter;

import ferp.core.util.Convert;

/**
 * User: igorgok
 * Date: 8/31/12 10:05 PM
 */
public class FilterSameSuitConsequentCards
{
  /*
   * 2 filter instances defined at the end of class (because of illegal forward declaration)
   *
   *   public static final Filter min;
   *   public static final Filter max;
   */

  public int apply(int candidates)
  {
    //Resolver.debug(true);

    // break into suits, filter, then assemble back
    int filtered = table[candidates & 0x000000FF] |
                   (table[(candidates & 0x0000FF00) >>> 8] << 8) |
                   (table[(candidates & 0x00FF0000) >>> 16] << 16) |
                   (table[(candidates & 0xFF000000) >>> 24] << 24);

    //Resolver.debug(filtered == 0);

    return filtered;
  }

  protected FilterSameSuitConsequentCards(short[] table)
  {
    this.table = table;
  }

  private final short[] table;

/*
  public static void main(String[] args)
  {
    for (int i = 1; i < 256; ++i)
    {
      int result = 0;

      // generate min
      for (int b = 128; b > 0; b >>>= 1)
        if ((i & b) != 0 && (b == 1 || (i & (b >>> 1)) == 0))
          result |= b;

      // generate max
      for (int b = 1; b < 129; b <<= 1)
        if ((i & b) != 0 && (b == 128 || (i & (b << 1)) == 0))
          result |= b;

      System.out.println("/* " + bin(i) + " --> " + bin(result) + '*' + "/ (byte)" + hex(result) + ',');
    }
  }
*/

  public static void main(String[] args)
  {
    for (int i = 0; i < 256; ++i)
    {
      int count = 0;

      // generate min
      for (int b = 1; b < 129; b <<= 1)
        if ((i & b) != 0)
          ++count;

      System.out.println("/* " + Convert.bin8(i) + " *" + "/ (byte)" + count + ',');
    }

  }

  private static final short minimums[] = {
    /* 00000000 */              0x00,
    /* 00000001 --> 00000001 */ 0x01,
    /* 00000010 --> 00000010 */ 0x02,
    /* 00000011 --> 00000001 */ 0x01,
    /* 00000100 --> 00000100 */ 0x04,
    /* 00000101 --> 00000101 */ 0x05,
    /* 00000110 --> 00000010 */ 0x02,
    /* 00000111 --> 00000001 */ 0x01,
    /* 00001000 --> 00001000 */ 0x08,
    /* 00001001 --> 00001001 */ 0x09,
    /* 00001010 --> 00001010 */ 0x0a,
    /* 00001011 --> 00001001 */ 0x09,
    /* 00001100 --> 00000100 */ 0x04,
    /* 00001101 --> 00000101 */ 0x05,
    /* 00001110 --> 00000010 */ 0x02,
    /* 00001111 --> 00000001 */ 0x01,
    /* 00010000 --> 00010000 */ 0x10,
    /* 00010001 --> 00010001 */ 0x11,
    /* 00010010 --> 00010010 */ 0x12,
    /* 00010011 --> 00010001 */ 0x11,
    /* 00010100 --> 00010100 */ 0x14,
    /* 00010101 --> 00010101 */ 0x15,
    /* 00010110 --> 00010010 */ 0x12,
    /* 00010111 --> 00010001 */ 0x11,
    /* 00011000 --> 00001000 */ 0x08,
    /* 00011001 --> 00001001 */ 0x09,
    /* 00011010 --> 00001010 */ 0x0a,
    /* 00011011 --> 00001001 */ 0x09,
    /* 00011100 --> 00000100 */ 0x04,
    /* 00011101 --> 00000101 */ 0x05,
    /* 00011110 --> 00000010 */ 0x02,
    /* 00011111 --> 00000001 */ 0x01,
    /* 00100000 --> 00100000 */ 0x20,
    /* 00100001 --> 00100001 */ 0x21,
    /* 00100010 --> 00100010 */ 0x22,
    /* 00100011 --> 00100001 */ 0x21,
    /* 00100100 --> 00100100 */ 0x24,
    /* 00100101 --> 00100101 */ 0x25,
    /* 00100110 --> 00100010 */ 0x22,
    /* 00100111 --> 00100001 */ 0x21,
    /* 00101000 --> 00101000 */ 0x28,
    /* 00101001 --> 00101001 */ 0x29,
    /* 00101010 --> 00101010 */ 0x2a,
    /* 00101011 --> 00101001 */ 0x29,
    /* 00101100 --> 00100100 */ 0x24,
    /* 00101101 --> 00100101 */ 0x25,
    /* 00101110 --> 00100010 */ 0x22,
    /* 00101111 --> 00100001 */ 0x21,
    /* 00110000 --> 00010000 */ 0x10,
    /* 00110001 --> 00010001 */ 0x11,
    /* 00110010 --> 00010010 */ 0x12,
    /* 00110011 --> 00010001 */ 0x11,
    /* 00110100 --> 00010100 */ 0x14,
    /* 00110101 --> 00010101 */ 0x15,
    /* 00110110 --> 00010010 */ 0x12,
    /* 00110111 --> 00010001 */ 0x11,
    /* 00111000 --> 00001000 */ 0x08,
    /* 00111001 --> 00001001 */ 0x09,
    /* 00111010 --> 00001010 */ 0x0a,
    /* 00111011 --> 00001001 */ 0x09,
    /* 00111100 --> 00000100 */ 0x04,
    /* 00111101 --> 00000101 */ 0x05,
    /* 00111110 --> 00000010 */ 0x02,
    /* 00111111 --> 00000001 */ 0x01,
    /* 01000000 --> 01000000 */ 0x40,
    /* 01000001 --> 01000001 */ 0x41,
    /* 01000010 --> 01000010 */ 0x42,
    /* 01000011 --> 01000001 */ 0x41,
    /* 01000100 --> 01000100 */ 0x44,
    /* 01000101 --> 01000101 */ 0x45,
    /* 01000110 --> 01000010 */ 0x42,
    /* 01000111 --> 01000001 */ 0x41,
    /* 01001000 --> 01001000 */ 0x48,
    /* 01001001 --> 01001001 */ 0x49,
    /* 01001010 --> 01001010 */ 0x4a,
    /* 01001011 --> 01001001 */ 0x49,
    /* 01001100 --> 01000100 */ 0x44,
    /* 01001101 --> 01000101 */ 0x45,
    /* 01001110 --> 01000010 */ 0x42,
    /* 01001111 --> 01000001 */ 0x41,
    /* 01010000 --> 01010000 */ 0x50,
    /* 01010001 --> 01010001 */ 0x51,
    /* 01010010 --> 01010010 */ 0x52,
    /* 01010011 --> 01010001 */ 0x51,
    /* 01010100 --> 01010100 */ 0x54,
    /* 01010101 --> 01010101 */ 0x55,
    /* 01010110 --> 01010010 */ 0x52,
    /* 01010111 --> 01010001 */ 0x51,
    /* 01011000 --> 01001000 */ 0x48,
    /* 01011001 --> 01001001 */ 0x49,
    /* 01011010 --> 01001010 */ 0x4a,
    /* 01011011 --> 01001001 */ 0x49,
    /* 01011100 --> 01000100 */ 0x44,
    /* 01011101 --> 01000101 */ 0x45,
    /* 01011110 --> 01000010 */ 0x42,
    /* 01011111 --> 01000001 */ 0x41,
    /* 01100000 --> 00100000 */ 0x20,
    /* 01100001 --> 00100001 */ 0x21,
    /* 01100010 --> 00100010 */ 0x22,
    /* 01100011 --> 00100001 */ 0x21,
    /* 01100100 --> 00100100 */ 0x24,
    /* 01100101 --> 00100101 */ 0x25,
    /* 01100110 --> 00100010 */ 0x22,
    /* 01100111 --> 00100001 */ 0x21,
    /* 01101000 --> 00101000 */ 0x28,
    /* 01101001 --> 00101001 */ 0x29,
    /* 01101010 --> 00101010 */ 0x2a,
    /* 01101011 --> 00101001 */ 0x29,
    /* 01101100 --> 00100100 */ 0x24,
    /* 01101101 --> 00100101 */ 0x25,
    /* 01101110 --> 00100010 */ 0x22,
    /* 01101111 --> 00100001 */ 0x21,
    /* 01110000 --> 00010000 */ 0x10,
    /* 01110001 --> 00010001 */ 0x11,
    /* 01110010 --> 00010010 */ 0x12,
    /* 01110011 --> 00010001 */ 0x11,
    /* 01110100 --> 00010100 */ 0x14,
    /* 01110101 --> 00010101 */ 0x15,
    /* 01110110 --> 00010010 */ 0x12,
    /* 01110111 --> 00010001 */ 0x11,
    /* 01111000 --> 00001000 */ 0x08,
    /* 01111001 --> 00001001 */ 0x09,
    /* 01111010 --> 00001010 */ 0x0a,
    /* 01111011 --> 00001001 */ 0x09,
    /* 01111100 --> 00000100 */ 0x04,
    /* 01111101 --> 00000101 */ 0x05,
    /* 01111110 --> 00000010 */ 0x02,
    /* 01111111 --> 00000001 */ 0x01,
    /* 10000000 --> 10000000 */ 0x80,
    /* 10000001 --> 10000001 */ 0x81,
    /* 10000010 --> 10000010 */ 0x82,
    /* 10000011 --> 10000001 */ 0x81,
    /* 10000100 --> 10000100 */ 0x84,
    /* 10000101 --> 10000101 */ 0x85,
    /* 10000110 --> 10000010 */ 0x82,
    /* 10000111 --> 10000001 */ 0x81,
    /* 10001000 --> 10001000 */ 0x88,
    /* 10001001 --> 10001001 */ 0x89,
    /* 10001010 --> 10001010 */ 0x8a,
    /* 10001011 --> 10001001 */ 0x89,
    /* 10001100 --> 10000100 */ 0x84,
    /* 10001101 --> 10000101 */ 0x85,
    /* 10001110 --> 10000010 */ 0x82,
    /* 10001111 --> 10000001 */ 0x81,
    /* 10010000 --> 10010000 */ 0x90,
    /* 10010001 --> 10010001 */ 0x91,
    /* 10010010 --> 10010010 */ 0x92,
    /* 10010011 --> 10010001 */ 0x91,
    /* 10010100 --> 10010100 */ 0x94,
    /* 10010101 --> 10010101 */ 0x95,
    /* 10010110 --> 10010010 */ 0x92,
    /* 10010111 --> 10010001 */ 0x91,
    /* 10011000 --> 10001000 */ 0x88,
    /* 10011001 --> 10001001 */ 0x89,
    /* 10011010 --> 10001010 */ 0x8a,
    /* 10011011 --> 10001001 */ 0x89,
    /* 10011100 --> 10000100 */ 0x84,
    /* 10011101 --> 10000101 */ 0x85,
    /* 10011110 --> 10000010 */ 0x82,
    /* 10011111 --> 10000001 */ 0x81,
    /* 10100000 --> 10100000 */ 0xa0,
    /* 10100001 --> 10100001 */ 0xa1,
    /* 10100010 --> 10100010 */ 0xa2,
    /* 10100011 --> 10100001 */ 0xa1,
    /* 10100100 --> 10100100 */ 0xa4,
    /* 10100101 --> 10100101 */ 0xa5,
    /* 10100110 --> 10100010 */ 0xa2,
    /* 10100111 --> 10100001 */ 0xa1,
    /* 10101000 --> 10101000 */ 0xa8,
    /* 10101001 --> 10101001 */ 0xa9,
    /* 10101010 --> 10101010 */ 0xaa,
    /* 10101011 --> 10101001 */ 0xa9,
    /* 10101100 --> 10100100 */ 0xa4,
    /* 10101101 --> 10100101 */ 0xa5,
    /* 10101110 --> 10100010 */ 0xa2,
    /* 10101111 --> 10100001 */ 0xa1,
    /* 10110000 --> 10010000 */ 0x90,
    /* 10110001 --> 10010001 */ 0x91,
    /* 10110010 --> 10010010 */ 0x92,
    /* 10110011 --> 10010001 */ 0x91,
    /* 10110100 --> 10010100 */ 0x94,
    /* 10110101 --> 10010101 */ 0x95,
    /* 10110110 --> 10010010 */ 0x92,
    /* 10110111 --> 10010001 */ 0x91,
    /* 10111000 --> 10001000 */ 0x88,
    /* 10111001 --> 10001001 */ 0x89,
    /* 10111010 --> 10001010 */ 0x8a,
    /* 10111011 --> 10001001 */ 0x89,
    /* 10111100 --> 10000100 */ 0x84,
    /* 10111101 --> 10000101 */ 0x85,
    /* 10111110 --> 10000010 */ 0x82,
    /* 10111111 --> 10000001 */ 0x81,
    /* 11000000 --> 01000000 */ 0x40,
    /* 11000001 --> 01000001 */ 0x41,
    /* 11000010 --> 01000010 */ 0x42,
    /* 11000011 --> 01000001 */ 0x41,
    /* 11000100 --> 01000100 */ 0x44,
    /* 11000101 --> 01000101 */ 0x45,
    /* 11000110 --> 01000010 */ 0x42,
    /* 11000111 --> 01000001 */ 0x41,
    /* 11001000 --> 01001000 */ 0x48,
    /* 11001001 --> 01001001 */ 0x49,
    /* 11001010 --> 01001010 */ 0x4a,
    /* 11001011 --> 01001001 */ 0x49,
    /* 11001100 --> 01000100 */ 0x44,
    /* 11001101 --> 01000101 */ 0x45,
    /* 11001110 --> 01000010 */ 0x42,
    /* 11001111 --> 01000001 */ 0x41,
    /* 11010000 --> 01010000 */ 0x50,
    /* 11010001 --> 01010001 */ 0x51,
    /* 11010010 --> 01010010 */ 0x52,
    /* 11010011 --> 01010001 */ 0x51,
    /* 11010100 --> 01010100 */ 0x54,
    /* 11010101 --> 01010101 */ 0x55,
    /* 11010110 --> 01010010 */ 0x52,
    /* 11010111 --> 01010001 */ 0x51,
    /* 11011000 --> 01001000 */ 0x48,
    /* 11011001 --> 01001001 */ 0x49,
    /* 11011010 --> 01001010 */ 0x4a,
    /* 11011011 --> 01001001 */ 0x49,
    /* 11011100 --> 01000100 */ 0x44,
    /* 11011101 --> 01000101 */ 0x45,
    /* 11011110 --> 01000010 */ 0x42,
    /* 11011111 --> 01000001 */ 0x41,
    /* 11100000 --> 00100000 */ 0x20,
    /* 11100001 --> 00100001 */ 0x21,
    /* 11100010 --> 00100010 */ 0x22,
    /* 11100011 --> 00100001 */ 0x21,
    /* 11100100 --> 00100100 */ 0x24,
    /* 11100101 --> 00100101 */ 0x25,
    /* 11100110 --> 00100010 */ 0x22,
    /* 11100111 --> 00100001 */ 0x21,
    /* 11101000 --> 00101000 */ 0x28,
    /* 11101001 --> 00101001 */ 0x29,
    /* 11101010 --> 00101010 */ 0x2a,
    /* 11101011 --> 00101001 */ 0x29,
    /* 11101100 --> 00100100 */ 0x24,
    /* 11101101 --> 00100101 */ 0x25,
    /* 11101110 --> 00100010 */ 0x22,
    /* 11101111 --> 00100001 */ 0x21,
    /* 11110000 --> 00010000 */ 0x10,
    /* 11110001 --> 00010001 */ 0x11,
    /* 11110010 --> 00010010 */ 0x12,
    /* 11110011 --> 00010001 */ 0x11,
    /* 11110100 --> 00010100 */ 0x14,
    /* 11110101 --> 00010101 */ 0x15,
    /* 11110110 --> 00010010 */ 0x12,
    /* 11110111 --> 00010001 */ 0x11,
    /* 11111000 --> 00001000 */ 0x08,
    /* 11111001 --> 00001001 */ 0x09,
    /* 11111010 --> 00001010 */ 0x0a,
    /* 11111011 --> 00001001 */ 0x09,
    /* 11111100 --> 00000100 */ 0x04,
    /* 11111101 --> 00000101 */ 0x05,
    /* 11111110 --> 00000010 */ 0x02,
    /* 11111111 --> 00000001 */ 0x01,
  };

  private static final short maximums[] = {
    /* 00000000 */              0x00,
    /* 00000001 --> 00000001 */ 0x01,
    /* 00000010 --> 00000010 */ 0x02,
    /* 00000011 --> 00000010 */ 0x02,
    /* 00000100 --> 00000100 */ 0x04,
    /* 00000101 --> 00000101 */ 0x05,
    /* 00000110 --> 00000100 */ 0x04,
    /* 00000111 --> 00000100 */ 0x04,
    /* 00001000 --> 00001000 */ 0x08,
    /* 00001001 --> 00001001 */ 0x09,
    /* 00001010 --> 00001010 */ 0x0a,
    /* 00001011 --> 00001010 */ 0x0a,
    /* 00001100 --> 00001000 */ 0x08,
    /* 00001101 --> 00001001 */ 0x09,
    /* 00001110 --> 00001000 */ 0x08,
    /* 00001111 --> 00001000 */ 0x08,
    /* 00010000 --> 00010000 */ 0x10,
    /* 00010001 --> 00010001 */ 0x11,
    /* 00010010 --> 00010010 */ 0x12,
    /* 00010011 --> 00010010 */ 0x12,
    /* 00010100 --> 00010100 */ 0x14,
    /* 00010101 --> 00010101 */ 0x15,
    /* 00010110 --> 00010100 */ 0x14,
    /* 00010111 --> 00010100 */ 0x14,
    /* 00011000 --> 00010000 */ 0x10,
    /* 00011001 --> 00010001 */ 0x11,
    /* 00011010 --> 00010010 */ 0x12,
    /* 00011011 --> 00010010 */ 0x12,
    /* 00011100 --> 00010000 */ 0x10,
    /* 00011101 --> 00010001 */ 0x11,
    /* 00011110 --> 00010000 */ 0x10,
    /* 00011111 --> 00010000 */ 0x10,
    /* 00100000 --> 00100000 */ 0x20,
    /* 00100001 --> 00100001 */ 0x21,
    /* 00100010 --> 00100010 */ 0x22,
    /* 00100011 --> 00100010 */ 0x22,
    /* 00100100 --> 00100100 */ 0x24,
    /* 00100101 --> 00100101 */ 0x25,
    /* 00100110 --> 00100100 */ 0x24,
    /* 00100111 --> 00100100 */ 0x24,
    /* 00101000 --> 00101000 */ 0x28,
    /* 00101001 --> 00101001 */ 0x29,
    /* 00101010 --> 00101010 */ 0x2a,
    /* 00101011 --> 00101010 */ 0x2a,
    /* 00101100 --> 00101000 */ 0x28,
    /* 00101101 --> 00101001 */ 0x29,
    /* 00101110 --> 00101000 */ 0x28,
    /* 00101111 --> 00101000 */ 0x28,
    /* 00110000 --> 00100000 */ 0x20,
    /* 00110001 --> 00100001 */ 0x21,
    /* 00110010 --> 00100010 */ 0x22,
    /* 00110011 --> 00100010 */ 0x22,
    /* 00110100 --> 00100100 */ 0x24,
    /* 00110101 --> 00100101 */ 0x25,
    /* 00110110 --> 00100100 */ 0x24,
    /* 00110111 --> 00100100 */ 0x24,
    /* 00111000 --> 00100000 */ 0x20,
    /* 00111001 --> 00100001 */ 0x21,
    /* 00111010 --> 00100010 */ 0x22,
    /* 00111011 --> 00100010 */ 0x22,
    /* 00111100 --> 00100000 */ 0x20,
    /* 00111101 --> 00100001 */ 0x21,
    /* 00111110 --> 00100000 */ 0x20,
    /* 00111111 --> 00100000 */ 0x20,
    /* 01000000 --> 01000000 */ 0x40,
    /* 01000001 --> 01000001 */ 0x41,
    /* 01000010 --> 01000010 */ 0x42,
    /* 01000011 --> 01000010 */ 0x42,
    /* 01000100 --> 01000100 */ 0x44,
    /* 01000101 --> 01000101 */ 0x45,
    /* 01000110 --> 01000100 */ 0x44,
    /* 01000111 --> 01000100 */ 0x44,
    /* 01001000 --> 01001000 */ 0x48,
    /* 01001001 --> 01001001 */ 0x49,
    /* 01001010 --> 01001010 */ 0x4a,
    /* 01001011 --> 01001010 */ 0x4a,
    /* 01001100 --> 01001000 */ 0x48,
    /* 01001101 --> 01001001 */ 0x49,
    /* 01001110 --> 01001000 */ 0x48,
    /* 01001111 --> 01001000 */ 0x48,
    /* 01010000 --> 01010000 */ 0x50,
    /* 01010001 --> 01010001 */ 0x51,
    /* 01010010 --> 01010010 */ 0x52,
    /* 01010011 --> 01010010 */ 0x52,
    /* 01010100 --> 01010100 */ 0x54,
    /* 01010101 --> 01010101 */ 0x55,
    /* 01010110 --> 01010100 */ 0x54,
    /* 01010111 --> 01010100 */ 0x54,
    /* 01011000 --> 01010000 */ 0x50,
    /* 01011001 --> 01010001 */ 0x51,
    /* 01011010 --> 01010010 */ 0x52,
    /* 01011011 --> 01010010 */ 0x52,
    /* 01011100 --> 01010000 */ 0x50,
    /* 01011101 --> 01010001 */ 0x51,
    /* 01011110 --> 01010000 */ 0x50,
    /* 01011111 --> 01010000 */ 0x50,
    /* 01100000 --> 01000000 */ 0x40,
    /* 01100001 --> 01000001 */ 0x41,
    /* 01100010 --> 01000010 */ 0x42,
    /* 01100011 --> 01000010 */ 0x42,
    /* 01100100 --> 01000100 */ 0x44,
    /* 01100101 --> 01000101 */ 0x45,
    /* 01100110 --> 01000100 */ 0x44,
    /* 01100111 --> 01000100 */ 0x44,
    /* 01101000 --> 01001000 */ 0x48,
    /* 01101001 --> 01001001 */ 0x49,
    /* 01101010 --> 01001010 */ 0x4a,
    /* 01101011 --> 01001010 */ 0x4a,
    /* 01101100 --> 01001000 */ 0x48,
    /* 01101101 --> 01001001 */ 0x49,
    /* 01101110 --> 01001000 */ 0x48,
    /* 01101111 --> 01001000 */ 0x48,
    /* 01110000 --> 01000000 */ 0x40,
    /* 01110001 --> 01000001 */ 0x41,
    /* 01110010 --> 01000010 */ 0x42,
    /* 01110011 --> 01000010 */ 0x42,
    /* 01110100 --> 01000100 */ 0x44,
    /* 01110101 --> 01000101 */ 0x45,
    /* 01110110 --> 01000100 */ 0x44,
    /* 01110111 --> 01000100 */ 0x44,
    /* 01111000 --> 01000000 */ 0x40,
    /* 01111001 --> 01000001 */ 0x41,
    /* 01111010 --> 01000010 */ 0x42,
    /* 01111011 --> 01000010 */ 0x42,
    /* 01111100 --> 01000000 */ 0x40,
    /* 01111101 --> 01000001 */ 0x41,
    /* 01111110 --> 01000000 */ 0x40,
    /* 01111111 --> 01000000 */ 0x40,
    /* 10000000 --> 10000000 */ 0x80,
    /* 10000001 --> 10000001 */ 0x81,
    /* 10000010 --> 10000010 */ 0x82,
    /* 10000011 --> 10000010 */ 0x82,
    /* 10000100 --> 10000100 */ 0x84,
    /* 10000101 --> 10000101 */ 0x85,
    /* 10000110 --> 10000100 */ 0x84,
    /* 10000111 --> 10000100 */ 0x84,
    /* 10001000 --> 10001000 */ 0x88,
    /* 10001001 --> 10001001 */ 0x89,
    /* 10001010 --> 10001010 */ 0x8a,
    /* 10001011 --> 10001010 */ 0x8a,
    /* 10001100 --> 10001000 */ 0x88,
    /* 10001101 --> 10001001 */ 0x89,
    /* 10001110 --> 10001000 */ 0x88,
    /* 10001111 --> 10001000 */ 0x88,
    /* 10010000 --> 10010000 */ 0x90,
    /* 10010001 --> 10010001 */ 0x91,
    /* 10010010 --> 10010010 */ 0x92,
    /* 10010011 --> 10010010 */ 0x92,
    /* 10010100 --> 10010100 */ 0x94,
    /* 10010101 --> 10010101 */ 0x95,
    /* 10010110 --> 10010100 */ 0x94,
    /* 10010111 --> 10010100 */ 0x94,
    /* 10011000 --> 10010000 */ 0x90,
    /* 10011001 --> 10010001 */ 0x91,
    /* 10011010 --> 10010010 */ 0x92,
    /* 10011011 --> 10010010 */ 0x92,
    /* 10011100 --> 10010000 */ 0x90,
    /* 10011101 --> 10010001 */ 0x91,
    /* 10011110 --> 10010000 */ 0x90,
    /* 10011111 --> 10010000 */ 0x90,
    /* 10100000 --> 10100000 */ 0xa0,
    /* 10100001 --> 10100001 */ 0xa1,
    /* 10100010 --> 10100010 */ 0xa2,
    /* 10100011 --> 10100010 */ 0xa2,
    /* 10100100 --> 10100100 */ 0xa4,
    /* 10100101 --> 10100101 */ 0xa5,
    /* 10100110 --> 10100100 */ 0xa4,
    /* 10100111 --> 10100100 */ 0xa4,
    /* 10101000 --> 10101000 */ 0xa8,
    /* 10101001 --> 10101001 */ 0xa9,
    /* 10101010 --> 10101010 */ 0xaa,
    /* 10101011 --> 10101010 */ 0xaa,
    /* 10101100 --> 10101000 */ 0xa8,
    /* 10101101 --> 10101001 */ 0xa9,
    /* 10101110 --> 10101000 */ 0xa8,
    /* 10101111 --> 10101000 */ 0xa8,
    /* 10110000 --> 10100000 */ 0xa0,
    /* 10110001 --> 10100001 */ 0xa1,
    /* 10110010 --> 10100010 */ 0xa2,
    /* 10110011 --> 10100010 */ 0xa2,
    /* 10110100 --> 10100100 */ 0xa4,
    /* 10110101 --> 10100101 */ 0xa5,
    /* 10110110 --> 10100100 */ 0xa4,
    /* 10110111 --> 10100100 */ 0xa4,
    /* 10111000 --> 10100000 */ 0xa0,
    /* 10111001 --> 10100001 */ 0xa1,
    /* 10111010 --> 10100010 */ 0xa2,
    /* 10111011 --> 10100010 */ 0xa2,
    /* 10111100 --> 10100000 */ 0xa0,
    /* 10111101 --> 10100001 */ 0xa1,
    /* 10111110 --> 10100000 */ 0xa0,
    /* 10111111 --> 10100000 */ 0xa0,
    /* 11000000 --> 10000000 */ 0x80,
    /* 11000001 --> 10000001 */ 0x81,
    /* 11000010 --> 10000010 */ 0x82,
    /* 11000011 --> 10000010 */ 0x82,
    /* 11000100 --> 10000100 */ 0x84,
    /* 11000101 --> 10000101 */ 0x85,
    /* 11000110 --> 10000100 */ 0x84,
    /* 11000111 --> 10000100 */ 0x84,
    /* 11001000 --> 10001000 */ 0x88,
    /* 11001001 --> 10001001 */ 0x89,
    /* 11001010 --> 10001010 */ 0x8a,
    /* 11001011 --> 10001010 */ 0x8a,
    /* 11001100 --> 10001000 */ 0x88,
    /* 11001101 --> 10001001 */ 0x89,
    /* 11001110 --> 10001000 */ 0x88,
    /* 11001111 --> 10001000 */ 0x88,
    /* 11010000 --> 10010000 */ 0x90,
    /* 11010001 --> 10010001 */ 0x91,
    /* 11010010 --> 10010010 */ 0x92,
    /* 11010011 --> 10010010 */ 0x92,
    /* 11010100 --> 10010100 */ 0x94,
    /* 11010101 --> 10010101 */ 0x95,
    /* 11010110 --> 10010100 */ 0x94,
    /* 11010111 --> 10010100 */ 0x94,
    /* 11011000 --> 10010000 */ 0x90,
    /* 11011001 --> 10010001 */ 0x91,
    /* 11011010 --> 10010010 */ 0x92,
    /* 11011011 --> 10010010 */ 0x92,
    /* 11011100 --> 10010000 */ 0x90,
    /* 11011101 --> 10010001 */ 0x91,
    /* 11011110 --> 10010000 */ 0x90,
    /* 11011111 --> 10010000 */ 0x90,
    /* 11100000 --> 10000000 */ 0x80,
    /* 11100001 --> 10000001 */ 0x81,
    /* 11100010 --> 10000010 */ 0x82,
    /* 11100011 --> 10000010 */ 0x82,
    /* 11100100 --> 10000100 */ 0x84,
    /* 11100101 --> 10000101 */ 0x85,
    /* 11100110 --> 10000100 */ 0x84,
    /* 11100111 --> 10000100 */ 0x84,
    /* 11101000 --> 10001000 */ 0x88,
    /* 11101001 --> 10001001 */ 0x89,
    /* 11101010 --> 10001010 */ 0x8a,
    /* 11101011 --> 10001010 */ 0x8a,
    /* 11101100 --> 10001000 */ 0x88,
    /* 11101101 --> 10001001 */ 0x89,
    /* 11101110 --> 10001000 */ 0x88,
    /* 11101111 --> 10001000 */ 0x88,
    /* 11110000 --> 10000000 */ 0x80,
    /* 11110001 --> 10000001 */ 0x81,
    /* 11110010 --> 10000010 */ 0x82,
    /* 11110011 --> 10000010 */ 0x82,
    /* 11110100 --> 10000100 */ 0x84,
    /* 11110101 --> 10000101 */ 0x85,
    /* 11110110 --> 10000100 */ 0x84,
    /* 11110111 --> 10000100 */ 0x84,
    /* 11111000 --> 10000000 */ 0x80,
    /* 11111001 --> 10000001 */ 0x81,
    /* 11111010 --> 10000010 */ 0x82,
    /* 11111011 --> 10000010 */ 0x82,
    /* 11111100 --> 10000000 */ 0x80,
    /* 11111101 --> 10000001 */ 0x81,
    /* 11111110 --> 10000000 */ 0x80,
    /* 11111111 --> 10000000 */ 0x80,
  };

  public static final FilterSameSuitConsequentCards min = new FilterSameSuitConsequentCards(minimums);
  public static final FilterSameSuitConsequentCards max = new FilterSameSuitConsequentCards(maximums);
}
                              